package com.numbfish.springbootswaggerstart.config;

import com.numbfish.springbootswaggerstart.annotation.MyAnnotation4Swagger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

import static com.google.common.base.Predicates.and;
import static com.google.common.base.Predicates.not;
import static springfox.documentation.builders.RequestHandlerSelectors.withMethodAnnotation;

@Configuration
public class SwaggerConfiguration {
    /**
     * 创建Docket类型对象，并使用Spring容器管理。
     * Docket 是Swagger中的全局配置对象
     */
    @Bean
    public Docket docket() {
        // 构造函数指定是Swagger版本
        Docket docket = new Docket(DocumentationType.SWAGGER_2);
        // API 帮助文档描述信息
        ApiInfo apiInfo = new ApiInfoBuilder()
                .contact( // 配置swagger文档主体内容
                        // name 企业名称
                        // url 企业网站地址
                        // 发布者的电子邮箱
                        new Contact("企业名称", "http://www.sina.com.cn", "herbert_git@163.com")
                )
                .title("swagger 学习帮助文档")
                .description("swagger 学习文档详细描述")
                .version("1.0")
                .build();
        docket.apiInfo(apiInfo);

        docket
                .select() // 获取Docket选择器，指定扫描包，如果不指定就会扫描启动类包及子包，只扫描controller包
                // 自定义注解功能实现
                .apis(and(not(withMethodAnnotation(MyAnnotation4Swagger.class)), RequestHandlerSelectors.basePackage("com.numbfish.springbootswaggerstart.controller"))).build();
        return docket;
    }
}
